package edu.ucue.ECU.dao;

import edu.ucue.ECU.exp.BuscarDatosEmergenciaException;
import edu.ucue.ECU.exp.GuardarDatosEmergenciaException;
import edu.ucue.ECU.ngc.Emergencia;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class EmergenciaDB {
    String t="hola";
    public void grabar(Emergencia miEmergencia) throws GuardarDatosEmergenciaException, BuscarDatosEmergenciaException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            System.out.println("insert into \"Emergencia\" (\"descripcionEmergencia\", \"ubicacionEmergencia\", \"telefonoLlamada\", \"fechaLlamada\") values('" + miEmergencia.getDescripcion()+ "','" + miEmergencia.getUbicacion()+ "','" + miEmergencia.getTelefono()+ "','" + miEmergencia.getFecha()  + "')");
            stmt.execute("insert into \"Emergencia\" (\"descripcionEmergencia\", \"ubicacionEmergencia\", \"telefonoLlamada\", \"fechaLlamada\")values('" + miEmergencia.getDescripcion()+ "','" + miEmergencia.getUbicacion()+ "','" + miEmergencia.getTelefono()+ "','" + miEmergencia.getFecha()  + "')");
            var.close();
            buscarUltimoId(miEmergencia);
            grabarEmisor(miEmergencia);
            grabarEstado(miEmergencia);
            grabarOperador(miEmergencia);
            grabarTipo(miEmergencia);
        } catch (SQLException ex) {
            throw new GuardarDatosEmergenciaException("Se produjo un error inesperado al guardar los datos de emergencia");
        }
    }
    
    private void grabarEmisor(Emergencia miEmergencia) throws GuardarDatosEmergenciaException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            System.out.println("insert into \"EmergenciaPersona\" values(" + miEmergencia.getIdEmergencia()+ ",'" + miEmergencia.getPersona().getCedula()+ "')");
            stmt.execute("insert into \"EmergenciaPersona\" values(" + miEmergencia.getIdEmergencia()+ ",'" + miEmergencia.getPersona().getCedula()+ "')");
            var.close();
        } catch (SQLException ex) {
            throw new GuardarDatosEmergenciaException("Se produjo un error inesperado al guardar los datos de emergencia");
        }
    }
    
    private void grabarEstado(Emergencia miEmergencia) throws GuardarDatosEmergenciaException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            System.out.println("insert into \"EmergenciaEstado\" values(" + miEmergencia.getIdEmergencia()+ ","+miEmergencia.getEstado().getIdEstado()+")");
            stmt.execute("insert into \"EmergenciaEstado\" values(" + miEmergencia.getIdEmergencia()+ ","+miEmergencia.getEstado().getIdEstado()+")");
            var.close();
        } catch (SQLException ex) {
            throw new GuardarDatosEmergenciaException("Se produjo un error inesperado al guardar los datos de emergencia");
        }
    }
    
    private void grabarTipo(Emergencia miEmergencia) throws GuardarDatosEmergenciaException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            System.out.println("insert into \"EmergenciaTipo\" values(" + miEmergencia.getIdEmergencia()+ ","+miEmergencia.getTipo().getId()+")");
            stmt.execute("insert into \"EmergenciaTipo\" values(" + miEmergencia.getIdEmergencia()+ ","+miEmergencia.getTipo().getId()+")");
            var.close();
        } catch (SQLException ex) {
            throw new GuardarDatosEmergenciaException("Se produjo un error inesperado al guardar los datos de emergencia");
        }
    }
    
    private void grabarOperador(Emergencia miEmergencia) throws GuardarDatosEmergenciaException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            System.out.println("insert into \"EmergenciaOperador\" values(" + miEmergencia.getIdEmergencia()+ ",'"+miEmergencia.getOperador().getCedula()+"')");
            stmt.execute("insert into \"EmergenciaOperador\" values(" + miEmergencia.getIdEmergencia()+ ",'"+miEmergencia.getOperador().getCedula()+"')");
            var.close();
        } catch (SQLException ex) {
            throw new GuardarDatosEmergenciaException("Se produjo un error inesperado al guardar los datos de emergencia");
        }
    }
    
       public Emergencia buscar(Emergencia miEmergencia) throws BuscarDatosEmergenciaException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            String consulta="select * from \"Emergencia\" where \"IdEmergencia\" =" + miEmergencia.getIdEmergencia() ;
            System.out.println(consulta);
            ResultSet resultado = stmt.executeQuery(consulta);
            if (resultado.next()) {
                miEmergencia.setDescripcion(resultado.getString("descripcionEmergencia"));
                miEmergencia.setUbicacion(resultado.getString("ubicacionEmergencia"));
                miEmergencia.setTelefono(resultado.getString("telefonoLlamada"));
                miEmergencia.setFecha(resultado.getDate("fechaLlamada").toString());
                var.close();
                return miEmergencia;
            }
            var.close();
            return null;
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            throw new BuscarDatosEmergenciaException("Se produjo un error inesperado al buscar los datos de emergencia");
        }
    }
    
       public void buscarUltimoId(Emergencia miEmergencia) throws BuscarDatosEmergenciaException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            String consulta="select max(\"idEmergencia\")  FROM \"Emergencia\"";
            ResultSet resultado = stmt.executeQuery(consulta);
            if (resultado!=null) {
                resultado.next();
                miEmergencia.setIdEmergencia(resultado.getInt("max"));
            }
            var.close();
        } catch (SQLException ex) {
            throw new BuscarDatosEmergenciaException("Se produjo un error inesperado al buscar los datos de emergencia");
        }
    }
       
      public ArrayList listar() throws BuscarDatosEmergenciaException {
        try {
            ArrayList todos=new ArrayList();
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            ResultSet resultado = stmt.executeQuery("select * from \"Emergencia\"");
            while (resultado.next()) {
                Emergencia miEmergencia = new Emergencia();
                miEmergencia.setIdEmergencia(resultado.getInt("idEmergencia"));
                miEmergencia.setDescripcion(resultado.getString("descripcionEmergencia"));
                miEmergencia.setUbicacion(resultado.getString("ubicacionEmergencia"));
                miEmergencia.setTelefono(resultado.getString("telefonoLlamada"));
                miEmergencia.setFecha(resultado.getDate("fechaLlamada").toString());
                todos.add(miEmergencia);
            }var.close();
            return todos;
        } catch (SQLException ex) {
            throw new BuscarDatosEmergenciaException("Se produjo un error inesperado al buscar los datos de emergencia");
        }
    }
      public ArrayList RecuperarReporte(int idEmergencia) throws BuscarDatosEmergenciaException {
        try {
            ArrayList todo=new ArrayList();
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            ResultSet resultado = stmt.executeQuery("select \"Persona\".\"CI\",\"Persona\".nombre, \"descripcionEmergencia\", \"ubicacionEmergencia\", \"telefonoLlamada\", \"fechaLlamada\", \"EstadoEmergencia\".\"nombreEstado\",  \"Operador\".nombre, \"TipoEmergencia\".\"nombreEmergencia\", \"Entidad\".\"nombreEntidad\" from \"Emergencia\", \"Persona\", \"EmergenciaPersona\", \"EstadoEmergencia\", \"EmergenciaEstado\", \"Operador\", \"EmergenciaOperador\", \"TipoEmergencia\", \"EmergenciaTipo\", \"EntidadTipoEmergencia\", \"Entidad\" where \"Persona\".\"CI\"=\"EmergenciaPersona\".\"CIPersona\" and \"Emergencia\".\"idEmergencia\"=\"EmergenciaPersona\".\"idEmergencia\" and \"Emergencia\".\"idEmergencia\"=\"EmergenciaEstado\".\"idEmergencia\" and \"EmergenciaEstado\".\"idEstado\"=\"EstadoEmergencia\".\"idEstado\" and \"Operador\".\"CI\"= \"EmergenciaOperador\".\"CIOperador\" and \"Emergencia\".\"idEmergencia\"=\"EmergenciaOperador\".\"idEmergencia\" and \"TipoEmergencia\".\"idTipoEmergencia\"=\"EmergenciaTipo\".\"idTipoEmergencia\" and \"Emergencia\".\"idEmergencia\"=\"EmergenciaTipo\".\"idEmergencia\" and \"TipoEmergencia\".\"idTipoEmergencia\"=\"EntidadTipoEmergencia\".\"idTipoEmergencia\" and \"EntidadTipoEmergencia\".\"idEntidad\"=\"Entidad\".\"idEntidad\" and \"Emergencia\".\"idEmergencia\"="+idEmergencia);
            while (resultado.next()) {
                ArrayList todos=new ArrayList();
                todos.add(resultado.getString(1));
                todos.add(resultado.getString(2));
                todos.add(resultado.getString(3));
                todos.add(resultado.getString(4));
                todos.add(resultado.getString(5));
                todos.add(resultado.getDate(6).toString()+"");
                todos.add(resultado.getString(7));
                todos.add(resultado.getString(8));
                todos.add(resultado.getString(9));
                todos.add(resultado.getString(10));
                todo.add(todos);
            }var.close();
            return todo;
        } catch (SQLException ex) {
            throw new BuscarDatosEmergenciaException("Se produjo un error inesperado al buscar los datos de emergencia");
        }
    }     

    public void grabarcaso(String caso, int idEmergencia, String ci) throws GuardarDatosEmergenciaException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            System.out.println("insert into \"EmergenciaCoordinador\" values(" + idEmergencia+ ",'"+ci+"','"+caso+"')");
            stmt.execute("insert into \"EmergenciaCoordinador\" values(" + idEmergencia+ ",'"+ci+"','"+caso+"')");
            var.close();
        } catch (SQLException ex) {
            throw new GuardarDatosEmergenciaException("Se produjo un error inesperado al guardar los datos de emergencia");
        }
    }      
      
      

}
